﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Presentation.Permisos.WinForms.Client.ViewModelBase;
using Cesave.Application.Permisos.Settings;
using Cesave.Presentation.Permisos.WinForms.Client.Views.Catalogs.CiclosFechas;
using Cesave.Infrastructure.CrossCutting.IoC;
using System.Globalization;
using Cesave.Presentation.Permisos.WinForms.Client.Resources;
using System.Windows.Forms;

namespace Cesave.Presentation.Permisos.WinForms.Client.ViewModels.Catalogs.CiclosFechas
{
	/// <summary>
	/// 
	/// </summary>
	public partial class CiclosFechasViewModel
		: ObservableObject
	{
		#region Private properties

		/// <summary>
		/// 
		/// </summary>
		private IPUSSettings _pusSettings;

		/// <summary>
		/// 
		/// </summary>
		private CiclosFechasView _ciclosFechasView;

		#endregion

		#region Constructor

		/// <summary>
		/// 
		/// </summary>
		/// <param name="view"></param>
		public CiclosFechasViewModel(CiclosFechasView view)
		{
			if (view == null)
				throw new ArgumentNullException("view");
			_pusSettings = IoCFactory.Resolve<IPUSSettings>();
			_ciclosFechasView = view;
			WireUpEvents();
			InitModels();
		}

		#endregion

		#region Event methods

		/// <summary>
		/// 
		/// </summary>
		private void WireUpEvents()
		{
			PropertyChanged += CiclosFechasViewModel_PropertyChanged;
			_ciclosFechasView.Load += LoadView;
			_ciclosFechasView.closeButton.Click += (sender, e) =>
			{
				_ciclosFechasView.Close();
			};
			_ciclosFechasView.newButton.Click += AddNewCiclosFecha;
			_ciclosFechasView.saveButton.Click += SaveCiclosFechas;
			_ciclosFechasView.ciclosFechasBindingSource.AddingNew += AddingNewCiclosFecha;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void LoadView(object sender, EventArgs e)
		{
			_ciclosFechasView.Text = string.Format(
				CultureInfo.InvariantCulture,
				WindowTitles.CiclosFechasWindowTitle
			);
		}

		#endregion

		#region Private properties

		private void InitModels()
		{
			LoadCiclos();
		}

		/// <summary>
		/// 
		/// </summary>
		private void StartWaiting()
		{
			_ciclosFechasView.WaitingBar.StartWaiting();
		}

		private void EndWaiting()
		{
			_ciclosFechasView.WaitingBar.EndWaiting();
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="message"></param>
		private void ShowMessage(string message)
		{
			MessageBox.Show(_ciclosFechasView,
				message,
				WindowTitles.CiclosFechasWindowTitle,
				MessageBoxButtons.OK,
				MessageBoxIcon.Error
			);
		}

		#endregion
	}
}
